/*
 * TestCreateBlockStorageResource.cpp
 *
 *  Created on: 14/11/2009
 *      Author: root
 */




#include <iostream>
#include "Bloque.h"
#include "../Strategies/Storage/BlockStorageStrategy.h"
#include "Almacenamiento.h"
#include "ArchivoBinario.h"
#include "Registro.h"
#include "../Externa/Clave.h"
#include "../Externa/Dato.h"
#include "Alumno.h"
#include "../StorageResourceFactory.h"
#include "../Strategies/Resource/SimpleResourceStrategy.h"
#include "StorageResource.h"
#include "../Externa/Utilitaria.h"

class TestCreateBlockStorageResource {
	StorageResourceFactory* factory;
	StorageResource* storageResource;
	BlockStorageStrategy* blockStorageStrategy;
	ArchivoBinario* archivoBinario;
	Alumno* alumno;
	Alumno* alumno2;
	Alumno* alumno3;
	Alumno* alumno4;
	Clave* clave;
	Bloque* bloque, *bloque2, *bloque3;
	ResourceStrategy * resourceStrategy;

public:
	void setup() {
		cout<< "setup en proceso"<<endl;
		factory = new StorageResourceFactory();
		factory->createStorageBlockResource(255,"TestRecursoAlmacenamientoBloques.txt");
		storageResource = factory->getStorageResource();
		cout<< "setup en proceso"<<endl;
		alumno=new Alumno();
		alumno->setApellido("like");
		alumno->setDni("123");
		alumno->setNombre("ale");
		alumno->setPadron("85424");

		alumno2=new Alumno();
		alumno2->setApellido("arcia");
		alumno2->setDni("1234");
		alumno2->setNombre("benyi");
		alumno2->setPadron("85224");

		alumno3 = new Alumno();
		alumno3->setApellido("Like Ponce");
		alumno3->setDni("10607437");
		alumno3->setNombre("Carlos Alberto");
		alumno3->setPadron("88845");

		alumno4 = new Alumno();
		alumno4->setApellido("like garcia");
		alumno4->setDni("1000");
		alumno4->setNombre("alejandro");
		alumno4->setPadron("85424utuiuyttyuiytiuytyujjjjjjjjjjjhhhhhhhhhhhhhhhhjjjjjjjjjjjjjjjjj");


		string dato1=alumno->serializar();
		string dato2=alumno2->serializar();
		string dato3=alumno3->serializar();

		clave = new Clave("DNI",alumno);

		/*Registro registro(dato1,*clave);
		Registro registro2(dato2,*clave);
		Registro registro3(dato3,*clave);

					//polimirfismo
		bloque = new Bloque(0,255);
		bloque->getRegistros()->push_back(registro);
		bloque->getRegistros()->push_back(registro2);
		bloque->getRegistros()->push_back(registro);

		bloque2 = new Bloque(1,255);
		bloque2->getRegistros()->push_back(registro);
		bloque2->getRegistros()->push_back(registro3);

		bloque3 = new Bloque(2,255);
		bloque3->getRegistros()->push_back(registro2);
		bloque3->getRegistros()->push_back(registro3);*/

		cout <<"setup terminado"<< endl;

	}

	void Terminar () {

		delete alumno;
		alumno = NULL;

		delete alumno2;
		alumno2 = NULL;

		delete alumno3;
		alumno3 = NULL;

		delete clave;
		clave = NULL;

		delete bloque;
		bloque = NULL;

		delete bloque2;
		bloque2 = NULL;

		delete bloque3;
		bloque3 = NULL;

		delete archivoBinario;
		archivoBinario = NULL;

		delete blockStorageStrategy;
		blockStorageStrategy = NULL;


		cout << "El test de BlockStorageStrategy se completo"<< endl;
	}

	void TestSaveData() {
		cout<<"TestSaveData"<<endl;
		storageResource->setClave(clave);
		cout<<"TestSaveData"<<endl;
		storageResource->setData(alumno);
		cout<<"TestSaveData"<<endl;
		storageResource->saveData();
		cout<<"TestSaveData termino correctamente"<<endl;
	}

	void Run() {
		setup();
		TestSaveData();
		Terminar();
	}


};
